package com.tarena.redis.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

/**
 * 在这个配置类中自定义 redisTemplate的序列化
 */
@Configuration
public class RedisConfiguration {
    //springboot的自动配置 已经给我创建了RedisTemplate<Object,Object>
    //所以如果我们也创建这个bean对象 springboot就不会再创建第二次
    //方法入参factory 自动配置直接注入的,可以直接使用 保证连接正确
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
        //自定义一个
        RedisTemplate redisTemplate=new RedisTemplate();
        //设置底层自动配置的连接工厂 让模版对象可以访问操作redis
        redisTemplate.setConnectionFactory(factory);
        //重新定义一个序列化逻辑 key值是String value值是object的json hashKey和hashValue也一样
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setValueSerializer(RedisSerializer.json());//value对象可以被序列化成json字符串
        redisTemplate.setHashKeySerializer(RedisSerializer.string());//hash的field属性序列化
        redisTemplate.setHashValueSerializer(RedisSerializer.json());//hash的value值序列化
        return redisTemplate;
    }
}
